import axios from 'axios'
import {getJwtToken} from "./utils";
import {Message} from 'element-ui'

class HttpRequest {
    constructor(baseUrl) {
        this.baseUrl = baseUrl;
    }

    initConfig() {
        const config = {
            baseURL: this.baseUrl,
            header: {}
        }
        return config;
    }

    request(options) {
        const instance = axios.create();

        instance.interceptors.response.use(
            response => {
                const res = response.data;
                if (!res.isok) {
                    return Promise.reject(res);
                } else {
                    return res;
                }
            },
            error => {
                if (error && error.response) {
                    switch (error.response.status) {
                        case 400:
                            error.message = error.response.data.message;
                            break;
                        case 401:
                            error.message = '未授权，请重新登录';
                            break;
                        case 403:
                            error.message = '拒绝访问';
                            break;
                        case 404:
                            error.message = '请求错误,未找到该资源';
                            break;
                        case 405:
                            error.message = '请求方法未允许';
                            break;
                        case 408:
                            error.message = '请求超时';
                            break;
                        case 500:
                            error.message = error.response.data.message;
                            break;
                        case 501:
                            error.message = '网络未实现';
                            break;
                        case 502:
                            error.message = '网络错误';
                            break;
                        case 503:
                            error.message = '服务不可用';
                            break;
                        case 504:
                            error.message = '网络超时';
                            break;
                        case 505:
                            error.message = 'http版本不支持该请求';
                            break;
                        default:
                            error.message = `未知错误${error.response.status}`;
                    }
                } else {
                    error.message = "连接到服务器失败";
                }
                Message.error(error.message);
                return Promise.reject(error);
            });

        instance.interceptors.request.use(config => {
            if (config.url !== "user/login") {
                config.headers["token"] = getJwtToken();
            }
            return config;
        });

        options = Object.assign(this.initConfig(), options)
        //在这里可以为axios实例instance设置拦截器
        return instance(options)
    }
}

export default HttpRequest